﻿//Philip grønbech 12/09-2011
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading;
using Interfaces;


namespace Model
{
    [Serializable]
    public class Auktion : IAuktion
    {
        private bool _erDerBudtEndnu = false;
        private static DateTime _sisdteTidUpdate;
        public Auktion(String navn, String ting, Double mindstepris, Int32 nummer)
        {
            Navn = navn;
            Ting = ting;
            Mindstepris = mindstepris;
            Pris = mindstepris;
            Nummer = nummer;
        }

        public IAuktion Byd(Double pris)
        {
            if (pris >= Mindstepris && pris > Pris)
            {
                _erDerBudtEndnu = true;
                Pris = pris;
                Console.WriteLine("Den nye pris for varenummer " + Nummer + " er: " + pris);
                SetSlutTid(Budrunde = 3);
                return this;
            }
            else
                return null;

        }

        private void SetSlutTid(ushort p)
        {
            if (_sisdteTidUpdate < (DateTime.Now+TimeSpan.FromSeconds(1)))
            {
                _sisdteTidUpdate = DateTime.Now;
                if (Budrunde == 3)
                {
                    Sluttid = DateTime.Now + new TimeSpan(0, 0, 10);
                }
                else if (Budrunde == 2)
                {
                    Sluttid = DateTime.Now + new TimeSpan(0, 0, 5);
                }
                else
                    Sluttid = DateTime.Now + new TimeSpan(0, 0, 3);
            }

        }

        public bool ErAuktionenSlut()
        {
            if (DateTime.Now >= Sluttid)
            {
                Console.WriteLine("Auktionen er slut");
                return true;
            }
            return false;
        }
        public override string ToString()
        {
            if (_erDerBudtEndnu)
            {
                return ("nummer: " + Nummer + "\t" + Navn + "\t" + Pris + " Tid tilbage: " + (Sluttid - DateTime.Now));
            }
            return ("nummer: " + Nummer + "\t" + Navn + "\tPris:" + Pris + " Auktionen er endnu ikke påbegyndt");
        }

        public bool SkalOpdateres()
        {
            if (DateTime.Now > Sluttid && Budrunde >= 1)
            {
                SetSlutTid(Budrunde);
                --Budrunde;
                return true;
            }
            else if (ErAuktionenSlut())
            {
                //throw new FileNotFoundException("auktion.cs - auktionen er slut, men jeg vil ikke fotælle dig hvem som vandt... HA!");
                return true;
            }
            return false;
        }



        public ushort Budrunde { get; private set; }

        public Double Pris { get; set; }

        public DateTime Sluttid { get; private set; }

        public Int32 Nummer { get; private set; }

        public Double Mindstepris { get; private set; }

        public String Ting { get; private set; }

        public String Navn { get; private set; }
    }
}
